#程序说明
#该程序可以求解二次函数解析式，求解方法使用ai算法
#输入方法如下
#
#第一行输入采集点x轴信息，以空格分隔（即如果采集点分别为（1，2），（3，-2），（4，7），第一行输入“1 3 4”，不含双引号，下同）
#第二行输入采集点y轴信息，以空格分隔
#第三行输入训练次数
#第四行输入解析式中常数a的初始值（初始训练时建议输入1）
#第五行输入解析式中常数b的初始值（初始训练时建议输入1）
#第六行输入解析式中常数c的初始值（初始训练时建议输入1）
#第七行输入解析式中常数a的更改方向（建议输入1）
#第八行输入解析式中常数b的更改方向（建议输入1）
#第九行输入解析式中常数c的更改方向（建议输入1）
#第十行输入解析式中常数a的更改数值（建议输入1）
#第十一行输入解析式中常数b的更改数值（建议输入1）
#第十二行输入解析式中常数c的更改数值（建议输入1）
#第十三行输入训练时先训练哪一个常数（只能输入“A”，“B“或”C”，建议输入“A”）
#
#
#输出格式如下
#
#第一行输出训练后误差（方差）
#第二行输出三个数，分别为训练后常数a，b，c的数值
#第三行输出三个数，分别为训练后常数a，b，c的更改方向（为了方便下次训练）
#第四行输出三个数，分别为训练后常数a，b，c的更改数值（为了方便下次训练）

from math import *



#get data
x = input().split(" ")
y = input().split(" ")


TrainTime = int(input())


TrainA = float(input())
TrainB = float(input())
TrainC = float(input())

ChangeDireA = int(input())
ChangeDireB = int(input())
ChangeDireC = int(input())

ChangeNumA = float(input())
ChangeNumB = float(input())
ChangeNumC = float(input())

NowChange = str(input())
#get data end


#计算方差
def cac():
    global x,y
    global TrainTime,TrainA,TrainB,TrainC,ChangeDireA,ChangeDireB,ChangeDireC,ChangeNumA,ChangeNumB,ChangeNumC,NowChange

    res = 0.0
    for i in range(len(x)):
        res += float(float(TrainA*(float(x[i])**2)+TrainB*float(x[i])+TrainC)-float(y[i]))**2
    
    return res
#计算方差 end


#更改数值
def change(BefDeviation):
    global x,y
    global TrainTime,TrainA,TrainB,TrainC,ChangeDireA,ChangeDireB,ChangeDireC,ChangeNumA,ChangeNumB,ChangeNumC,NowChange

    if(NowChange == "A"):
        LTrainA = TrainA
        TrainA += ChangeDireA*ChangeNumA
        NowChange = "B"

        AftDeviation = cac()
        if(AftDeviation < BefDeviation):
            ChangeNumA *= 2
            return AftDeviation
        else:
            ChangeNumA /= 2
            ChangeDireA *= -1
            TrainA = LTrainA
            return BefDeviation
    
    if(NowChange == "B"):
        LTrainB = TrainB
        TrainB += ChangeDireB*ChangeNumB
        NowChange = "C"

        AftDeviation = cac()
        if(AftDeviation < BefDeviation):
            ChangeNumB *= 2
            return AftDeviation
        else:
            ChangeNumB /= 2
            ChangeDireB *= -1
            TrainB = LTrainB
            return BefDeviation
    
    if(NowChange == "C"):
        LTrainC = TrainC
        TrainC += ChangeDireC*ChangeNumC
        NowChange = "A"

        AftDeviation = cac()
        if(AftDeviation < BefDeviation):
            ChangeNumC *= 2
            return AftDeviation
        else:
            ChangeNumC /= 2
            ChangeDireC *= -1
            TrainC = LTrainC
            return BefDeviation
#更改数值 end


#主函数
def main():
    global x,y
    global TrainTime,TrainA,TrainB,TrainC,ChangeDireA,ChangeDireB,ChangeDireC,ChangeNumA,ChangeNumB,ChangeNumC,NowChange
    
    Deviation = cac()
    for i in range(TrainTime):
        Deviation = change(Deviation)

    print(Deviation)
    print(str(TrainA)," ",str(TrainB)," ",str(TrainC))
    print(str(ChangeDireA)," ",str(ChangeDireB)," ",str(ChangeDireC))
    print(str(ChangeNumA)," ",str(ChangeNumB)," ",str(ChangeNumC))
#主函数 end


main()

